home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: New Zealand Amiga Users Group / New Zealand Amiga Users Group Newsdisk v03 (1987-02)(NZAmigaUG).zip / New Zealand Amiga Users Group Newsdisk v03 (1987-02)(NZAmigaUG).adf / BASIC / ObEdhi (.txt) < prev    next >
AmigaBASIC Source Code  |  1993-12-02  |  12KB  |  579 lines

  1. '     Last modified : Oct 23, 1985
  2.  
  3.   DEFINT a-z
  4.  
  5. '   Format of the file produced by this program
  6. '
  7. '   long ColorSetOffset
  8. '   long DataSetOffset
  9. '   long depth                  number of bit planes
  10. '   long width                  width of object in pixels
  11. '   long height                 height of object in pixels
  12. '   short flags:
  13. '     fVsprite=1                TRUE if its a vsprite, FALSE if its a BOB
  14.       collisionPlaneIncluded=2  'never set by this editor
  15.       imageShadowIncluded=4     'never set by this editor
  16.       SAVEBACK=8                'save background before drawing BOB
  17.       OVERLAY=16                'color 0 for BOB is transparent, not black
  18.       SAVEBOB=32                'let BOB act like a paint brush
  19. '   short planePick          which playfield planes do object planes map to
  20. '   short planeOnOff         set to 0 by object editor
  21. '   <first bit-plane>
  22. '   <second bit-plane>       /* must begin on even byte boundary */
  23. '     :
  24. '   <last bit-plane>
  25. '   <imageShadow bit-plane>  not currently produced by object editor
  26. '   <collision bit-plane>    not currently produced by object editor
  27. '
  28.  
  29.   DEF FNArraySize& = 3+INT((Bobright+16)/16)*(bobbottom+1)*Depth
  30.   DIM DrawRect(3),ToolName$(6)
  31.  
  32.   scrn=-1 'puts window in workbench screen
  33.   Depth=2
  34.   WinY=185: WinX=617
  35. 'If BOBs are to be created with other than 2 bit-planes
  36. ' alter next 3 lines (only if machine has more than 256k)
  37.   INPUT "Screen depth (1-4)";Depth
  38.   scrn=1
  39.   SCREEN scrn,640,200,Depth,2
  40.   WINDOW 2,"GT's Object Editor",(0,0)-(WinX,WinY),31,scrn
  41.  
  42.   PRINT "GT's Amiga-BASIC Object Editor"
  43.   LIBRARY "graphics.library"
  44.   GOSUB InitConstant
  45.   GOSUB InitFile
  46.   GOSUB InitMenu
  47. StartOver:
  48.   ON MENU GOSUB CheckMenu : MENU ON
  49.   ON MOUSE GOSUB CheckMouse : MOUSE ON
  50.   ON BREAK GOSUB IgnoreBreak: BREAK ON
  51.   DrawBoundary
  52.   GOSUB PrintStatus
  53.   Unfinished = -1
  54.   WHILE Unfinished
  55.     SLEEP 'this program is completely event driven
  56.   WEND
  57.   MENU RESET
  58.   CLS
  59.   END
  60.  
  61. InitConstant:
  62.   IF FRE(-1)>50000 THEN MaxTool=6 :ELSE MaxTool=5
  63.   ToolMode=1
  64.   currentcolor=1
  65.   MaxY=120: MaxX=500
  66.   MaxY10=MaxY+10: MaxX10=MaxX+10
  67.   statusline=22
  68.   Top = 20: Left = 450
  69.   MaxBobRight=3*0.8*FRE(0)/4 : MaxBobBottom=0.8*FRE(0)/4
  70.   RETURN
  71.  
  72. InitFile:
  73.   CLS
  74.   IF Depth = 2 THEN
  75.     PRINT "Enter 1 if you want to edit sprites"
  76.     INPUT "Enter 0 if you want to edit bobs > ",fVsprite
  77.   ELSE
  78.     fVsprite = 0 'user can't edit sprite
  79.   END IF
  80.   bobbottom=31
  81.   IF fVsprite =0 THEN INPUT "Enter bob size: X,Y ",Bobright,bobbottom
  82.   CLS
  83.   FileName$=""
  84.   Flags=SAVEBACK+OVERLAY+fVsprite
  85.   IF fVsprite = 0 THEN Bobright=Bobright-1:bobbottom=bobbottom-1 :ELSE Bobright=15
  86.   currentX=Bobright:currentY=bobbottom
  87.   maxcolor=2^Depth - 1
  88.   DIM rgb%(maxcolor,3)
  89.   PlanePick=maxcolor
  90.   Change=0
  91.   RETURN
  92.  
  93. InitMenu:
  94.   MENU 1,0,1,"File"
  95.   MENU 1,1,1,"New"
  96.   MENU 1,2,1,"Open ..."
  97.   MENU 1,3,1,"Save"
  98.   MENU 1,5,1,"Quit"
  99.   MENU 1,4,1,"Save as ..."
  100.   MENU 2,0,1,"Tools" 
  101.   MENU 3,0,1,"Enlarge"
  102.   MENU 3,1,1,"4x4"
  103.   MENU 3,2,1,"1x1"
  104.   MENU 4,0,1,""
  105.   ToolName$(1)="Pen"
  106.   ToolName$(2)="Line"
  107.   ToolName$(3)="Oval"
  108.   ToolName$(4)="Rectangle"
  109.   ToolName$(5)="Eraser"
  110.   ToolName$(6)="Paint"
  111.   FOR i=1 TO MaxTool
  112.     MENU 2,i,1,ToolName$(i)
  113.   NEXT i
  114.   
  115.   RETURN
  116.  
  117. CheckMenu:
  118.   MenuId=MENU(0)
  119.   MenuItem=MENU(1)
  120.   ON MenuId GOTO FileMenu,ToolsMenu,FatBits
  121.  
  122. CheckMouse:
  123.   GetCurrentXY
  124.   IF currentY>MaxY+10 AND currentX>400 THEN EditColor 
  125.   IF currentY>MaxY+10 THEN CheckColor
  126.   IF NOT fEnlarge THEN
  127.     IF currentY>bobbottom+10 OR currentX>Bobright+10 THEN RETURN
  128.     IF currentY>=bobbottom AND currentX>=Bobright THEN ChangeSizePicture
  129.     IF (currentY>bobbottom OR currentX>Bobright) THEN RETURN
  130.   ELSE
  131.     IF currentX>Bobright*Offset OR currentY>bobbottom*Offset THEN RETURN
  132.   END IF
  133.   StartY=currentY
  134.   StartX=currentX
  135.   Change=-1
  136.   ON ToolMode GOSUB Pen,DrawLine,DrawCircle,DrawRectangle,ErasePicture,PaintPicture
  137.   RETURN
  138.  
  139. DrawLine:
  140.   WHILE MOUSE(0)<>0
  141.     GetCurrentXY
  142.     IF InsideBob THEN
  143.       InvertVideo
  144.       LINE (StartX,StartY)-(currentX,currentY) 'draw line
  145.       LINE (StartX,StartY)-(currentX,currentY) 'erase line
  146.       NormalVideo
  147.     END IF
  148.   WEND
  149.   LINE (StartX,StartY)-(currentX,currentY),currentcolor
  150.   RETURN
  151.   
  152. FatBits:
  153.   ON MenuItem GOTO Enlarge, Shrink
  154.   
  155. Enlarge:
  156.   IF fEnlarge THEN RETURN
  157.   fBig = -1
  158.   IF bobbottom > 31 THEN
  159.     LOCATE 17,1:PRINT "Y >= 31 too large to enlarge. ";
  160.   ELSEIF Bobright >=100 THEN 
  161.     LOCATE 17,1:PRINT "X >=100 too large to enlarge. ";
  162.   ELSE
  163.     fBig = 0
  164.   END IF
  165.   IF fBig THEN
  166.     PRINT "Press any key to continue";
  167. 10 a$=INKEY$:IF a$="" GOTO 10
  168.     LOCATE 17,1:PRINT "                                  ";   
  169.     PRINT "                            ";
  170.     RETURN
  171.   END IF
  172.   Offset = 4:OffsetB=Offset-1
  173.   ChangeToolsMode 0 'Disable Tools
  174.   MenuItem = 1
  175.   GOSUB ToolsMenu
  176.   fEnlarge = -1 'Enlarge flag
  177.  
  178.   DIM BobArray(FNArraySize&)
  179.   GET (0,0)-(Bobright,bobbottom),BobArray
  180.   LINE (Left-1,Top-1)-(Left+Bobright+1,Top+bobbottom+1),,b
  181.   PUT (Left,Top),BobArray
  182.   ERASE BobArray
  183.   
  184.   LINE (0,0)-(Bobright*2,bobbottom*2),0,bf
  185.   LINE (-1,-1)-((Bobright+1)*Offset,(bobbottom+1)*Offset),,b
  186.   m=0:n=0
  187.   FOR i=Left TO Left+Bobright
  188.     n=0
  189.     FOR j=Top TO Top+bobbottom
  190.       x=POINT(i,j)
  191.       IF x>0 THEN LINE (m,n)-(m+OffsetB,n+OffsetB),x,bf
  192.       n=n+Offset
  193.     NEXT j
  194.     m=m+Offset
  195.   NEXT i
  196.   RETURN
  197.       
  198.   
  199. Shrink:
  200.   IF fEnlarge = 0 THEN RETURN
  201.   ChangeToolsMode 1
  202.   fEnlarge = 0
  203.   DIM BobArray(FNArraySize&)
  204.   GET (Left,Top)-(Left+Bobright,Top+bobbottom),BobArray
  205.   LINE (Left-1,Top-1)-(Left+Bobright+1,Top+bobbottom+1),0,bf
  206.   LINE (0,0)-(Bobright*Offset+Offset,Offset*bobbottom+Offset),0,bf
  207.   DrawBoundary
  208.   PUT (0,0),BobArray
  209.   ERASE BobArray
  210.   RETURN
  211.   
  212.  
  213. SUB ChangeToolsMode (Mode) STATIC
  214. SHARED MaxTool
  215.   FOR i=2 TO MaxTool
  216.     MENU 2,i,Mode
  217.   NEXT
  218. END SUB
  219.  
  220. Pen:
  221.   IF fEnlarge THEN GOTO BigPen
  222.   GetCurrentXY
  223.   IF InsideBob THEN PSET (currentX,currentY),currentcolor
  224.   WHILE MOUSE(0)<>0
  225.     GetCurrentXY
  226.     IF NOT InsideBob THEN RETURN
  227.     LINE -(currentX,currentY),currentcolor
  228.   WEND
  229.   RETURN
  230.   
  231. BigPen:
  232.   GOSUB GetX1Y1
  233.   IF InsideBob THEN 
  234.     PSET (currentX+Left,currentY+Top),currentcolor
  235.     LINE (x1,y1)-(x1+OffsetB,y1+OffsetB),currentcolor,bf
  236.   END IF
  237.   WHILE MOUSE(0)<>0
  238.     GOSUB GetX1Y1
  239.     IF InsideBob  THEN
  240.       PSET (currentX+Left,currentY+Top),currentcolor
  241.       LINE (x1,y1)-(x1+OffsetB,y1+OffsetB),currentcolor,bf
  242.     END IF
  243.   WEND
  244.   RETURN
  245.   
  246. GetX1Y1:
  247.   GetCurrentXY
  248.   IF (currentX>=0 AND currentX < (Bobright+1)*Offset) AND (currentY>=0 AND currentY <(bobbottom+1)*Offset) THEN 
  249.     InsideBob = -1
  250.     currentX = INT(currentX/Offset)
  251.     x1=currentX*Offset
  252.     currentY=INT(currentY/Offset)
  253.     y1=currentY*Offset
  254.   ELSE
  255.     InsideBob = 0
  256.   END IF
  257.   RETURN
  258.  
  259. DrawCircle:
  260.   GOSUB TrackRect
  261.   CenterX=(DrawRect(1)+DrawRect(3))/2
  262.   CenterY=(DrawRect(2)+DrawRect(0))/2
  263.   RadiusX=(DrawRect(3)-DrawRect(1))/2
  264.   RadiusY=(DrawRect(2)-DrawRect(0))/2
  265.   IF RadiusX=0 OR RadiusY=0 THEN RETURN
  266.   Aspect!=ABS(RadiusY/RadiusX)
  267.   IF RadiusX < RadiusY THEN RadiusX=RadiusY
  268.   CIRCLE (CenterX,CenterY),RadiusX,currentcolor,,,Aspect!
  269.   RETURN
  270.  
  271. DrawRectangle:
  272.   GOSUB TrackRect
  273.   LINE (DrawRect(1),DrawRect(0))-(DrawRect(3),DrawRect(2)),currentcolor,b
  274.   RETURN
  275.  
  276. ErasePicture:
  277.   WHILE MOUSE(0)<>0
  278.     GetCurrentXY
  279.     IF currentX-5<0 OR currentY-3<0 THEN InsideBob=0
  280.     IF InsideBob THEN
  281.       LINE (currentX-5,currentY-3)-(currentX,currentY),1,bf
  282.       LINE (currentX-5,currentY-3)-(currentX,currentY),0,bf
  283.     END IF
  284.   WEND
  285.   DrawBoundary
  286.   RETURN
  287.  
  288. PaintPicture:
  289.   IF InsideBob THEN 
  290.      LINE(0,bobbottom+1)-(Bobright+1,bobbottom+1),currentcolor
  291.      LINE(Bobright+1,0)-(Bobright+1,bobbottom+1),currentcolor
  292.      PAINT (currentX, currentY),currentcolor
  293.      DrawBoundary
  294.   END IF
  295.   RETURN
  296.  
  297. TrackRect:
  298.   WHILE MOUSE(0)<>0
  299.     GetCurrentXY
  300.     IF InsideBob THEN
  301.       DrawRect(0)=StartY
  302.       DrawRect(1)=StartX
  303.       DrawRect(2)=currentY
  304.       DrawRect(3)=currentX
  305.       InvertVideo
  306.       FrameRect DrawRect() 'Draw it
  307.       FrameRect DrawRect() 'Erase it
  308.       NormalVideo
  309.     END IF
  310.   WEND
  311.   IF currentY<StartY THEN DrawRect(0)=currentY: DrawRect(2)=StartY
  312.   IF currentX<StartX THEN DrawRect(1)=currentX: DrawRect(3)=StartX
  313.   RETURN
  314.  
  315. ChangeSizePicture:
  316.   MaxMem = 0.8 * FRE(0)
  317.   COLOR 0
  318.   DrawBoundary
  319.   COLOR 1
  320.   InvertVideo
  321.   WHILE MOUSE(0)<>0
  322.     GetCurrentXY 
  323.     IF (currentY < MaxY) AND (currentY > 0) THEN
  324.      IF (currentX <= MaxX) AND (currentX >= 10) THEN
  325.       IF MaxMem > (Depth * currentX * currentY /8) THEN   
  326.         IF fVsprite = 1 THEN Bobright = 15:currentX=15::ELSE Bobright=currentX
  327.         bobbottom=currentY
  328.         DrawBoundary
  329.         DrawBoundary
  330.       END IF 
  331.      END IF
  332.     END IF
  333.   WEND
  334.   NormalVideo
  335.   GOSUB GetPicture
  336.   GOSUB RedrawPicture
  337.   RETURN
  338.  
  339. ToolsMenu:
  340.   ToolMode=MenuItem
  341.   GOSUB PrintToolStatus
  342.   RETURN
  343.  
  344. FileMenu:
  345.   ON MenuItem GOSUB NewFile,OpenFile,SaveFile,SaveFileAs,Quit
  346.   RETURN
  347.  
  348. NewFile:
  349.   GOSUB CheckSave
  350.   IF CancelCommand THEN RETURN
  351.   CLS
  352.   GOSUB InitFile
  353.   GOTO StartOver
  354.  
  355. OpenFile:
  356.   GOSUB CheckSave
  357.   IF CancelCommand THEN RETURN
  358.   CLS
  359.   INPUT "Enter Filename > ",FileName$
  360.   IF FileName$="" THEN NewFile
  361.   OPEN FileName$ FOR INPUT AS 1
  362.   ColorSet=CVL(INPUT$(4,1))
  363.   DataSet=CVL(INPUT$(4,1))
  364.   Depth=CVL(INPUT$(4,1))
  365.   Bobright=CVL(INPUT$(4,1)) - 1
  366.   bobbottom=CVL(INPUT$(4,1)) - 1
  367.   REM --- UNDONE if ColorSet<>0 or DataSet<>0, read image.editor format file
  368.   Flags=CVI(INPUT$(2,1))
  369.   IF Flags AND 1 THEN fVsprite = 1 :ELSE fVsprite = 0
  370.   IF PlanePick <> CVI(INPUT$(2,1)) THEN
  371.     PRINT "Error: file not compatible with this SCREEN"
  372.   ELSE
  373.     PlaneOnOff=CVI(INPUT$(2,1))
  374.     ArraySize&=FNArraySize&
  375.     DIM BobArray(ArraySize&)
  376.     BobArray(0)=Bobright + 1
  377.     BobArray(1)=bobbottom + 1
  378.     BobArray(2)=Depth
  379.     FOR i=3 TO ArraySize&-1
  380.       BobArray(i)=CVI(INPUT$(2,1))
  381.     NEXT i
  382.     CLS
  383.     currentX=Bobright: currentY=bobbottom
  384.     GOSUB RedrawPicture
  385.   END IF
  386.   CLOSE #1
  387.   Change=0
  388.   GOTO StartOver
  389.  
  390. SaveFileAs:
  391.   FileName$=""
  392. SaveFile:
  393.   IF fEnlarge THEN GOSUB Shrink
  394.   GOSUB GetPicture
  395.   IF FileName$="" THEN CLS: INPUT "Enter Filename > ",FileName$
  396.   IF FileName$<>"" THEN
  397.     OPEN FileName$ FOR OUTPUT AS 1
  398.     PRINT #1, MKL$(0); 'ColorSet
  399.     PRINT #1, MKL$(0); 'DataSet
  400.     PRINT #1, MKI$(0);MKI$(BobArray(2)); 'depth
  401.     PRINT #1, MKI$(0);MKI$(BobArray(0)); 'width
  402.     PRINT #1, MKI$(0);MKI$(BobArray(1)); 'height
  403.     PRINT #1, MKI$(Flags);
  404.     PRINT #1, MKI$(PlanePick);  'planePick
  405.     PRINT #1, MKI$(0);  'planeOnOff
  406.     FOR i=3 TO ArraySize&-1
  407.       PRINT #1, MKI$(BobArray(i));
  408.     NEXT i
  409.     IF fVsprite THEN
  410.     'Output the colors for sprite> Change output values for different colors
  411.       PRINT #1,MKI$(&Hff); 'White. Color 1
  412.       PRINT #1,MKI$(0); 'Black. Color 2
  413.       PRINT #1,MKI$(&Hf80); 'Orange. Color 3
  414.     END IF
  415.     CLOSE#1
  416.   END IF
  417.   GOSUB RedrawPicture
  418.   Change=0
  419.   RETURN
  420.  
  421. Quit:
  422.   Cancel=0
  423.   GOSUB CheckSave
  424.   IF CancelCommand THEN RETURN
  425.   Unfinished=0
  426.   RETURN
  427.  
  428. GetPicture:
  429.   ArraySize&=FNArraySize&
  430.   DIM BobArray(ArraySize&)
  431.   GET (0,0)-(Bobright,bobbottom),BobArray
  432.   RETURN
  433.  
  434. RedrawPicture:
  435.   CLS
  436.   PUT (0,0),BobArray,PSET
  437.   ERASE BobArray
  438.   DrawBoundary
  439.   GOSUB PrintStatus
  440.   RETURN
  441.  
  442. PrintStatus:                                                  
  443.   PrintCurrentXY
  444.   GOSUB PrintToolStatus
  445.   GOSUB PrintColorBar
  446.   GOSUB PrintEditBox
  447.   RETURN
  448.  
  449. PrintToolStatus:
  450.   LOCATE statusline,24: PRINT SPACE$(10);
  451.   LOCATE statusline,24: PRINT ToolName$(ToolMode);
  452.   RETURN
  453.  
  454. PrintColorBar:
  455.   COLOR 0
  456.   LOCATE 19,1: PRINT " ";
  457.   colorbar = WINDOW(5)-10 
  458.   LINE(10,colorbar)-(60,colorbar+20),currentcolor,bf
  459.   COLOR 1
  460.   x=70
  461.   FOR i=0 TO maxcolor
  462.     LINE (x,colorbar)-(x+20,y+colorbar+20),i,bf
  463.     LINE (x,colorbar)-(x+20,y+colorbar+20),1,b
  464.     x=x+20
  465.   NEXT i 
  466.   LINE (70,colorbar+22)-(90+maxcolor*20,colorbar+26),0,bf
  467.   x=70+currentcolor*20:LINE ( x,colorbar+22)-(x+20,colorbar+26),1,bf
  468.   RETURN
  469.  
  470. CheckColor:
  471.   IF currentY<colorbar OR currentY>colorbar+20 THEN RETURN
  472.   IF currentX<70 THEN RETURN
  473.   i=INT((currentX-70)/20)
  474.   IF i>maxcolor THEN RETURN
  475.   currentcolor=i
  476.   LINE(456,colorbar+1)-(584,colorbar+30),0,bf
  477.   LOCATE 19,58+rgb%(i,1):PRINT  "R";
  478.   LOCATE 20,58+rgb%(i,2):PRINT "G";
  479.   LOCATE 21,58+rgb%(i,3):PRINT "B"; 
  480.   LOCATE statusline+1,1:PRINT  SPACE$(60);                         
  481.   GOSUB PrintColorBar
  482.   RETURN
  483.  
  484. EditColor:
  485.   IF currentY<colorbar OR currentX<455 THEN RETURN
  486.   i=(currentY-colorbar-1)\10 : j=(currentX-455)\8
  487.   IF i>2 OR j>15 THEN RETURN
  488.   cuc=currentcolor
  489.   LOCATE 19+i,58 :PRINT SPACE$(16);:LOCATE 19+i,58+j
  490.   IF i=0 THEN PRINT  "R"; :ELSE IF i=1 THEN PRINT "G"; :ELSE PRINT  "B";
  491.   rgb%(cuc,i+1)=j:PALETTE cuc,rgb%(cuc,1)/15,rgb%(cuc,2)/15,rgb%(cuc,3)/15
  492.   LOCATE statusline+1,1
  493.   PRINT  "RED: ";rgb%(cuc,1);INT(rgb%(cuc,1)*6.666)/100;"  GREEN: ";rgb%(cuc,2);INT(rgb%(cuc,2)*6.666)/100;"   BLUE: ";rgb%(cuc,3);INT(rgb%(cuc,3)*6.666)/100;"         ";
  494.   RETURN
  495.   
  496.   
  497. PrintEditBox:
  498.   LINE(455,colorbar)-(585,colorbar+31),1,b
  499.   red=rgb%(currentcolor,1):green=rgb%(currentcolor,2):blue=rgb%(currentcolor,3)
  500.   COLOR 1
  501.   LOCATE 19,58+red:PRINT "R";
  502.   LOCATE 20,58+green:PRINT  "G";
  503.   LOCATE 21,58+blue:PRINT  "B";
  504.   RETURN
  505.  
  506. CheckSave:
  507.   IF fEnlarge THEN GOSUB Shrink
  508.   CancelCommand=0
  509.   IF Change THEN
  510.     BEEP
  511.     GOSUB GetPicture
  512.     CLS
  513.     PRINT "Current file is not saved."
  514.     PRINT "Do you want to save it?"
  515.     PRINT " Press Y key if you want to save it"
  516.     PRINT " Press N key if don't you want to save it"
  517.     PRINT " Press C key if you want to cancel command"
  518.     Response=0
  519.     WHILE Response=0
  520.       a$=INKEY$
  521.       IF a$<>"" THEN
  522.         a$=UCASE$(a$)
  523.         IF a$="Y" THEN Response=1
  524.         IF a$="N" THEN Response=2
  525.         IF a$="C" THEN Response=3
  526.         IF Response=0 THEN BEEP
  527.       END IF
  528.     WEND
  529.     GOSUB RedrawPicture
  530.     IF Response=1 THEN GOSUB SaveFileAs
  531.     IF Response=3 THEN CancelCommand=-1
  532.   END IF
  533.   RETURN
  534.  
  535. SUB GetCurrentXY STATIC
  536.   SHARED currentX,currentY,InsideBob,Bobright,bobbottom
  537.   dummy=MOUSE(0)
  538.   currentX=MOUSE(1)
  539.   currentY=MOUSE(2)
  540.   InsideBob=-1
  541.   IF currentX>Bobright OR currentY>bobbottom THEN InsideBob=0
  542.   IF currentX<0 OR currentY<0 THEN InsideBob=0
  543.   END SUB
  544.  
  545. SUB PrintCurrentXY STATIC
  546.   SHARED statusline,currentX,currentY
  547.   LOCATE statusline,1: PRINT "Bob size X:";currentX;
  548.   LOCATE statusline,17: PRINT "Y:";currentY;
  549. END SUB
  550.  
  551. SUB DrawBoundary STATIC
  552. SHARED Bobright,bobbottom
  553.   x=Bobright+10
  554.   y=bobbottom+10
  555.   LINE (0,y)-(x,y)
  556.   LINE (x,y)-(x,0)
  557.   LINE (0,bobbottom+1)-(x,bobbottom+1)
  558.   LINE (Bobright+1,y)-(Bobright+1,0)
  559. END SUB
  560.  
  561. SUB InvertVideo STATIC
  562.    CALL SetDrMd& (WINDOW(8),3)
  563. END SUB
  564.  
  565. SUB NormalVideo STATIC
  566.    CALL SetDrMd& (WINDOW(8),1)
  567. END SUB
  568.  
  569. SUB FrameRect(rect()) STATIC
  570.   LINE (rect(1),rect(0))-(rect(3),rect(0))
  571.   LINE (rect(3),rect(0))-(rect(3),rect(2))
  572.   LINE (rect(3),rect(2))-(rect(1),rect(2))
  573.   LINE (rect(1),rect(2))-(rect(1),rect(0))
  574. END SUB
  575.  
  576. IgnoreBreak:
  577.   RETURN
  578.  
  579.